package org.lestr.secuel.sogl.maths;

import java.util.Collection;
import org.lestr.secuel.m3ds.IUsine;
import org.lestr.secuel.m3ds.maths.IPoint3d;

public class Point3d<E extends IPoint3d.IEcouteur<P>, P extends IPoint3d> implements IPoint3d<E, P> {


    // Déclaration de constantes
    private static final long serialVersionUID = 1L;


    // Déclaration des attributs
    private double x;


    private double y;


    private double z;


    private Collection<E> écouteurs;


    private IUsine usine;


    /** Constructeur */
    public Point3d(IUsine usine) {

        // Instanciation des attributs
        this.usine = usine;
        x = 0;
        y = 0;
        z = 0;

    }// FIN Constructeur


    /** Constructeur */
    public Point3d(IUsine usine,
                   double x,
                   double y,
                   double z) {

        // Instanciation des attributs
        this.usine = usine;
        this.x = x;
        this.y = y;
        this.z = z;

    }// FIN Constructeur


    /** Constructeur */
    public Point3d(IUsine usine,
                   IPoint3d point3d) {

        this(usine,
             point3d.obtenirX(),
             point3d.obtenirY(),
             point3d.obtenirZ());

    }// FIN Constructeur


    protected IUsine obtenirUsine() {

        return usine;

    }// FIN Méthode obtenirUsine


    /** Défini X */
    @Override
    public void définirXYZ(double x,
                           double y,
                           double z) {

        définirX(x);
        définirY(y);
        définirZ(z);

    }// FIN définirX


    /** Défini X */
    @Override
    public void définirXYZ(IPoint3d point3d) {

        définirXYZ(point3d.obtenirX(),
                   point3d.obtenirY(),
                   point3d.obtenirZ());

    }// FIN définirX


    /** Défini X */
    @Override
    public void définirX(double x) {

        this.x = x;

    }// FIN définirX


    /** Retourne X */
    @Override
    public double obtenirX() {

        return x;

    }// FIN obtenirX


    /** Défini Y */
    @Override
    public void définirY(double y) {

        this.y = y;

    }// FIN définirY


    /** Retourne Y */
    @Override
    public double obtenirY() {

        return y;

    }// FIN obtenirY


    /** Défini Z */
    @Override
    public void définirZ(double z) {

        this.z = z;

    }// FIN définirZ


    /** Retourne Z */
    @Override
    public double obtenirZ() {

        return z;

    }// FIN obtenirZ


    /**
     * @return the écouteurs
     */
    @Override
    public Collection<E> obtenirEcouteurs() {

        return écouteurs;

    }// FIN Méthode obtenirEcouteurs


}// FIN Classe Point3d
